home *** CD-ROM | disk | FTP | other *** search
/ PCNet 1998 May / PCnet Mayıs 1998.iso / Multimed / Program / A_Trial.exe / data.z / JMxAsyncRead.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-12-04  |  3.1 KB  |  177 lines

  1. import java.awt.Color;
  2. import java.io.DataInputStream;
  3. import java.io.FilterInputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.net.URL;
  7. import java.net.URLConnection;
  8.  
  9. public class JMxAsyncRead implements Runnable {
  10.    protected Thread m_ReadThread;
  11.    protected JMxAsyncReadOwner m_Owner;
  12.    protected JMxPlayer m_Player;
  13.    protected String m_Filename = "";
  14.    protected String m_Data = "";
  15.    protected URL m_URL;
  16.  
  17.    public JMxAsyncRead(JMxAsyncReadOwner var1, URL var2, JMxPlayer var3) {
  18.       this.m_Owner = var1;
  19.       this.m_Filename = var2.getFile();
  20.       this.m_URL = var2;
  21.       this.m_Player = var3;
  22.       this.m_ReadThread = new Thread(this, "JMxAsyncRead thread");
  23.       this.m_ReadThread.start();
  24.    }
  25.  
  26.    public boolean Stop() {
  27.       this.m_ReadThread.interrupt();
  28.       return true;
  29.    }
  30.  
  31.    public boolean readHeader(JMxDataInputStream var1) throws IOException {
  32.       int var2 = ((DataInputStream)var1).readUnsignedByte();
  33.       String var3 = var1.readAscii(var2);
  34.       if (!var3.equals("JMPLAYER")) {
  35.          JMxLog.Log(3, "JMxAsyncRead::run -- invalid file format\n");
  36.          ((FilterInputStream)var1).close();
  37.          return false;
  38.       } else {
  39.          var2 = ((DataInputStream)var1).readInt();
  40.          int var4 = ((DataInputStream)var1).readInt();
  41.          int var5 = ((DataInputStream)var1).readInt();
  42.          int var6 = ((DataInputStream)var1).readInt();
  43.          int var7 = ((DataInputStream)var1).readInt();
  44.          int var8 = ((DataInputStream)var1).readInt();
  45.          if (var8 == 0) {
  46.             JMxLog.Log(3, "JMxAsyncRead::run -- invalid file format\n");
  47.             ((FilterInputStream)var1).close();
  48.             return false;
  49.          } else if (Thread.interrupted()) {
  50.             JMxLog.Log(3, "JMxAsyncRead::readHeader -- interrupted\n");
  51.             ((FilterInputStream)var1).close();
  52.             return false;
  53.          } else {
  54.             return true;
  55.          }
  56.       }
  57.    }
  58.  
  59.    public boolean readOptions(JMxDataInputStream var1) throws IOException {
  60.       int var2 = ((DataInputStream)var1).readInt();
  61.       int var3 = ((DataInputStream)var1).readInt();
  62.       ((DataInputStream)var1).skipBytes(var3 * 4);
  63.       if ((var2 = var2 - (4 + var3 * 4)) <= 0) {
  64.          return true;
  65.       } else {
  66.          ((DataInputStream)var1).skipBytes(8);
  67.          var2 -= 8;
  68.          if (var2 <= 0) {
  69.             return true;
  70.          } else {
  71.             var3 = ((DataInputStream)var1).readInt();
  72.             var2 -= 4;
  73.             if (var2 <= 0) {
  74.                return true;
  75.             } else {
  76.                if (var3 > 0) {
  77.                   int[] var4 = new int[var3];
  78.  
  79.                   for(int var5 = 0; var5 < var3; ++var5) {
  80.                      var4[var5] = ((DataInputStream)var1).readInt();
  81.                      var2 -= 4;
  82.                      if (var2 <= 0 || var3 == var5 + 1) {
  83.                         this.m_Player.SetTransitionUsage(var4);
  84.                         if (var2 <= 0) {
  85.                            return true;
  86.                         }
  87.                      }
  88.                   }
  89.                }
  90.  
  91.                var3 = ((DataInputStream)var1).readInt();
  92.                var2 -= 4;
  93.                if (var2 <= 0) {
  94.                   return true;
  95.                } else {
  96.                   if (var3 > 0) {
  97.                      int[] var15 = new int[var3];
  98.  
  99.                      for(int var17 = 0; var17 < var3; ++var17) {
  100.                         var15[var17] = ((DataInputStream)var1).readInt();
  101.                         var2 -= 4;
  102.                         if (var2 <= 0 || var3 == var17 + 1) {
  103.                            this.m_Player.SetClassUsage(var15);
  104.                            if (var2 <= 0) {
  105.                               return true;
  106.                            }
  107.                         }
  108.                      }
  109.                   }
  110.  
  111.                   int var16 = ((DataInputStream)var1).readInt();
  112.                   int var18 = var16 >> 16 & 255;
  113.                   int var6 = var16 >> 8 & 255;
  114.                   int var7 = var16 & 255;
  115.                   this.m_Player.setBackground(new Color(var7, var6, var18));
  116.                   var2 -= 4;
  117.                   if (var2 <= 0) {
  118.                      return true;
  119.                   } else {
  120.                      ((DataInputStream)var1).skipBytes(var2);
  121.                      if (Thread.interrupted()) {
  122.                         JMxLog.Log(3, "JMxAsyncRead::readOptions -- interrupted\n");
  123.                         ((FilterInputStream)var1).close();
  124.                         return false;
  125.                      } else {
  126.                         return true;
  127.                      }
  128.                   }
  129.                }
  130.             }
  131.          }
  132.       }
  133.    }
  134.  
  135.    public void run() {
  136.       try {
  137.          URLConnection var1 = this.m_URL.openConnection();
  138.          int var2 = var1.getContentLength();
  139.          if (var2 <= 0 && var2 != -1) {
  140.             JMxLog.Log(3, "JMxAsyncRead::run -- No Content available" + this.m_URL.toString());
  141.             this.m_Owner.ReadComplete(this.m_Filename, 5);
  142.          } else {
  143.             InputStream var3 = var1.getInputStream();
  144.             JMxDataInputStream var4 = new JMxDataInputStream(var3);
  145.             if (!this.readHeader(var4)) {
  146.                this.m_Owner.ReadComplete(this.m_Filename, 4);
  147.             } else if (!this.readOptions(var4)) {
  148.                this.m_Owner.ReadComplete(this.m_Filename, 4);
  149.             } else {
  150.                JObList var5 = new JObList();
  151.                int var6 = ((DataInputStream)var4).readInt();
  152.                int var7 = ((DataInputStream)var4).readInt();
  153.  
  154.                for(int var8 = 0; var8 < var7; ++var8) {
  155.                   if (Thread.interrupted()) {
  156.                      JMxLog.Log(3, "JMxAsyncRead::run -- interrupted\n");
  157.                      ((FilterInputStream)var4).close();
  158.                      return;
  159.                   }
  160.  
  161.                   JMxMedia var9 = JMxMedia.LoadData(var4, this.m_Player);
  162.                   if (var9 != null) {
  163.                      var5.AddTail(var9);
  164.                   }
  165.                }
  166.  
  167.                this.m_Player.SetMediaList(var5);
  168.                this.m_Owner.ReadComplete(this.m_Filename, 2);
  169.             }
  170.          }
  171.       } catch (IOException var11) {
  172.          JMxLog.Log(3, "JMxAsyncRead::run -- catch IO exception\n " + ((Throwable)var11).toString());
  173.          this.m_Owner.ReadComplete(this.m_Filename, 4);
  174.       }
  175.    }
  176. }
  177.